﻿<!DOCTYPE HTML>
<html lang="zh">
<head>
<title>NumPut - 语法 &amp; 使用 | AutoHotkey v2</title>
<meta name="description" content="The NumPut function stores a number in binary format at the specified address+offset." />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script>
</head>
<body>

<h1>NumPut</h1>
<p>以二进制格式把数字存储到指定地址+偏移的位置.</p>
<pre class="Syntax"><span class="func">NumPut</span> Type, Number, <span class="optional">Type2, Number2, ...</span> Target <span class="optional">, Offset := 0</span></pre>
<p class="warning"><strong>不推荐:</strong> 正考虑删除下面的语法以支持上面的语法.</p>
<pre class="Syntax"><span class="func">NumPut</span> Number, Target <span class="optional">, Offset := 0</span><span class="optional">, Type := "UPtr"</span></pre>

<h2 id="Parameters">参数</h2>
<dl>

  <dt>Type</dt>
  <dd>
      <p>类型: <a href="../Concepts.htm#strings">字符串</a></p>
      <p>下列字符串的其中一个(省略时默认为 UPtr):<br>
    UInt, UInt64, Int, Int64, Short, UShort, Char, UChar, Double, Float, Ptr 或 UPtr</p>
      <p>对于所有整数类型, 或者在传递纯整数时, 有符号与无符号并不影响结果, 因为使用了二进制补码来表示有符号整数.</p>
      <p>作为原义字符串使用时, 这些类型名必须用引号括起来.</p>
      <p>有关详情, 请参阅 <a href="DllCall.htm#types">DllCall 类型</a>.</p>
    </dd>

  <dt>Number</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#numbers">整数</a></p>
    <p>要保存的数字.</p>
  </dd>

  <dt>Target</dt>
  <dd>
    <p>类型: <a href="../objects/Buffer.htm">对象</a>, <a href="../Concepts.htm#numbers">整数</a>或<a href="../Concepts.htm#variables">变量</a></p>
		<p>类<a href="../objects/Buffer.htm">缓冲</a>对象, 内存地址或变量引用.</p>
    <p>可以使用任何实现 <a href="../objects/Buffer.htm#Ptr">Ptr</a> 和 <a href="../objects/Buffer.htm#Size">Size</a> 属性的对象, 但此函数针对原生的<a href="../objects/Buffer.htm">缓冲</a>对象进行了优化. 传递具有这些属性的对象可确保函数不会将内存写入无效位置; 这样做可能会导致崩溃或其他不可预测的行为.</p>
    <p class="warning"><strong>不推荐:</strong> 如果 <em>Target</em> 是一个变量, 例如 <code>MyVar</code>, 并且包含一个字符串(非纯数字), 则使用该字符串变量的缓冲的地址和大小. 在将来的版本中, 传递包含字符串的变量可能会被视为错误. 结构数据和其他二进制数据应使用<a href="../objects/Buffer.htm">缓冲</a>对象.</p>
    <p>如果变量包含一个纯数字, 则假定该数字为地址.</p>
	</dd>

  <dt>Offset</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#numbers">整数</a></p>
    <p>偏移 - 以字节为单位 - 将其添加到 <em>Target</em> 以确定目标地址.</p>
  </dd>

</dl>

<h2 id="Return_Value">返回值</h2>
<p>类型: <a href="../Concepts.htm#numbers">整数</a></p>
<p>函数返回最后写入的项右边的地址. 这在写入一系列不同类型的数字时经常使用, 例如在 <a href="DllCall.htm">DllCall</a> 中使用的结构. 但是, 在某些情况下, 使用如下所述的多参数模式可能更简单有效.</p>

<h2 id="Remarks">备注</h2>
<p>可以在第一个 <em>Number</em> 之后, 通过重复任意次数的 <em>Type</em> 和 <em>Number</em> 来写入数字序列. 每个数字都写入前一个数字之后的下一个字节, 不带填充. 创建用于 <a href="DllCall.htm">DllCall</a> 的结构时, 请注意, 由于数据对齐要求, 某些字段可能需要添加显式填充.</p>
<p>如果整数太大而无法放入指定的 <em>Type</em>, 那么它的高位会被忽略; 例如 <code>NumPut(257, buf, 0, &quot;Char&quot;)</code> 将存储数字 1.</p>
<p>如果目标地址无效, 则可能抛出异常. 但是, 一些无效地址不能被检测到, 并可能导致不可预知的行为. 传递<a href="../objects/Buffer.htm">缓冲</a>对象而不是地址可以确保目标地址总是可以得到验证.</p>
<p class="warning"><strong>不推荐:</strong> 如果只使用了三个参数, 并且 <em>Number</em> 第一个参数, 则第三个参数可以是 <em>Offset</em>, 也可以是 <em>Type</em>. 例如, <code>NumPut(x, buf, "int")</code> 是有效的.</p>

<h2 id="Related">相关</h2>
<p><a href="NumGet.htm">NumGet</a>, <a href="DllCall.htm">DllCall</a>, <a href="BufferAlloc.htm">BufferAlloc</a>, <a href="../objects/Buffer.htm">Buffer object</a>, <a href="VarSetCapacity.htm">VarSetCapacity</a></p>

</body>
</html>